﻿Imports Clases
Public Class frmProductos
    Private productoSeleccionado As Producto 'variable para operar con el producto seleccionado facilmnete
    Private esNuevo As Boolean  'variable que nos dice si es un nuevo producto y lo añadimos o si es uno viejo y lo modificamos
    ''' <summary>
    ''' cargamos los comboBox cuando iniciemos el formulario
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub ProductosForm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        esNuevo = True
        Me.Text &= usuarioActivo.Nombre
        cboTipoProducto.Items.Add("Comida")
        cboTipoProducto.Items.Add("Complementos")
        cboTipoProducto.Items.Add("Bebidas")
        cboTipoProdExpuesto.Items.Add("Comida")
        cboTipoProdExpuesto.Items.Add("Complementos")
        cboTipoProdExpuesto.Items.Add("Bebidas")
        AddHandler misProductos.ErrorProducto, AddressOf misProductos_ErrorProducto
    End Sub
    ''' <summary>
    ''' Segun el tipo de comida que elijamos se rellenará el siguiente comboBox
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub cboTipoProducto_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles cboTipoProducto.SelectedIndexChanged
        esNuevo = False
        cboTipoProdExpuesto.SelectedIndex = -1
        cboTipoProdExpuesto.Enabled = False
        limpiarTxtBox()
        Try

        
            If misProductos.Productos.Count > 0 Then
                'Dim listaProductosSelectionados As New List(Of Producto)
               
                cargarComboProductos()
            Else
                MessageBox.Show("Añada algún producto")
            End If
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try

    End Sub
    ''' <summary>
    ''' Se carga el combo de productos
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub cargarComboProductos()
        cboProductos.Items.Clear()
        For i As Integer = 0 To misProductos.Productos.Count - 1
            If cboTipoProducto.SelectedIndex = 0 Then
                If misProductos.Productos(i).GetType = GetType(Comida) Then cboProductos.Items.Add(misProductos.Productos(i).Nombre)
            End If
            If cboTipoProducto.SelectedIndex = 1 Then
                If misProductos.Productos(i).GetType = GetType(Complementos) Then cboProductos.Items.Add(misProductos.Productos(i).Nombre)
            End If
            If cboTipoProducto.SelectedIndex = 2 Then
                If misProductos.Productos(i).GetType = GetType(Bebida) Then cboProductos.Items.Add(misProductos.Productos(i).Nombre)
            End If
        Next
    End Sub
    ''' <summary>
    ''' Sólo admite dígitos
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub txtPrecio_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtPrecio.KeyPress
        Const NUM = "0123456789." & ControlChars.Back
        If Not NUM.Contains(e.KeyChar.ToString) Then
            e.KeyChar = ""
        End If
    End Sub
    ''' <summary>
    ''' seleccionamos un producto y rellenamos los campos
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub cboProductos_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles cboProductos.SelectedIndexChanged

        Dim nombreProducto As String
        If cboProductos.SelectedIndex <> -1 Then
            nombreProducto = cboProductos.SelectedItem.ToString
            productoSeleccionado = New Producto(nombreProducto, 1, "", "")
            productoSeleccionado = misProductos.Productos(misProductos.Productos.IndexOf(productoSeleccionado))
            txtNombre.Text = productoSeleccionado.Nombre
            pbFoto.ImageLocation = productoSeleccionado.Foto
            cboTipoProdExpuesto.SelectedIndex = cboTipoProducto.SelectedIndex
            txtPrecio.Text = productoSeleccionado.Precio
            txtDescripcion.Text = productoSeleccionado.Descripcion
            esNuevo = False
        End If
    End Sub
    ''' <summary>
    ''' añadir una foto
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnArchivos_Click(sender As System.Object, e As System.EventArgs) Handles btnArchivos.Click
        Dim openFileDialog1 As New OpenFileDialog()
        openFileDialog1.InitialDirectory = "c:\Imágenes"
        openFileDialog1.Filter = "Image files (*.jpg,*.bmp,*.gif)|*.jpg;*.bmp;*.gif|All files (*.*)|*.*"
        openFileDialog1.FilterIndex = 1
        openFileDialog1.RestoreDirectory = True
        openFileDialog1.Multiselect = False

        If openFileDialog1.ShowDialog() = Windows.Forms.DialogResult.Cancel Then Exit Sub

        pbFoto.ImageLocation = openFileDialog1.FileName
        'MessageBox.Show(pbFoto.ImageLocation)
    End Sub
    ''' <summary>
    ''' Subprograma para limpiar los formularios
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub limpiarFormulario()
        limpiarTxtBox()
        cboProductos.SelectedIndex = -1
        cboTipoProducto.SelectedIndex = -1
    End Sub
    Private Sub limpiarTxtBox()
        txtNombre.Text = ""
        txtDescripcion.Text = ""
        txtPrecio.Text = ""
        pbFoto.ImageLocation = ""
        cboProductos.SelectedIndex = -1
    End Sub
    ''' <summary>
    ''' Botón para crear un nuevo producto
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnNewProd_Click(sender As System.Object, e As System.EventArgs) Handles btnNewProd.Click
        limpiarFormulario()
        esNuevo = True
        cboTipoProdExpuesto.Enabled = True
    End Sub
    ''' <summary>
    ''' Botón para modificar o agregar un producto
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnGuardarProd_Click(sender As System.Object, e As System.EventArgs) Handles btnGuardarProd.Click
        Me.ErrorProvider1.Clear()
        If txtNombre.Text = "" Then
            Me.ErrorProvider1.SetError(txtNombre, "Debe darle un nombre al producto")
        Else
            Me.ErrorProvider1.SetError(txtNombre, "")
        End If
        If txtPrecio.Text = "" Then
            Me.ErrorProvider1.SetError(txtPrecio, "Debe darle un precio al producto")
        Else
            Me.ErrorProvider1.SetError(txtPrecio, "")
        End If
        Dim men As String = ""
        If txtNombre.Text <> "" AndAlso txtPrecio.Text <> "" AndAlso cboTipoProdExpuesto.SelectedIndex <> -1 AndAlso pbFoto.ImageLocation <> "" Then
            Dim nuevoProducto As Producto = Nothing
            If cboTipoProdExpuesto.SelectedIndex = 0 OrElse cboTipoProducto.SelectedIndex = 0 Then nuevoProducto = New Comida(txtNombre.Text, txtPrecio.Text, txtDescripcion.Text, pbFoto.ImageLocation)
            If cboTipoProdExpuesto.SelectedIndex = 1 OrElse cboTipoProducto.SelectedIndex = 1 Then nuevoProducto = New Complementos(txtNombre.Text, txtPrecio.Text, txtDescripcion.Text, pbFoto.ImageLocation)
            If cboTipoProdExpuesto.SelectedIndex = 2 OrElse cboTipoProducto.SelectedIndex = 2 Then nuevoProducto = New Bebida(txtNombre.Text, txtPrecio.Text, txtDescripcion.Text, pbFoto.ImageLocation)
            If esNuevo OrElse misProductos.Productos.Count = 0 Then

                men = misProductos.Añadir(nuevoProducto)
            Else

                men = misProductos.Modificar(nuevoProducto, cboProductos.SelectedItem.ToString)
                cargarComboProductos()
            End If
            'If cboTipoProdExpuesto.SelectedIndex = 0 OrElse cboTipoProducto.SelectedIndex = 0 Then
            '    men = misProductos.Añadir(New Comida(txtNombre.Text, txtPrecio.Text, txtDescripcion.Text, pbFoto.ImageLocation))
            'End If
            If men <> "" Then
                MessageBox.Show(men)
            End If
            'productoSeleccionado = misProductos.Productos(misProductos.Productos.IndexOf(nuevoProducto))
        End If
    End Sub
    ''' <summary>
    ''' Botón para eliminar un producto
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnEliminarProd_Click(sender As System.Object, e As System.EventArgs) Handles btnEliminarProd.Click
        If txtNombre.Text <> "" AndAlso txtPrecio.Text <> "" AndAlso cboTipoProdExpuesto.SelectedIndex <> -1 AndAlso pbFoto.ImageLocation <> "" Then
            Dim indice As Integer = misProductos.Productos.IndexOf(productoSeleccionado)
            Dim men As String = misProductos.Borrar(productoSeleccionado.Nombre)
            If men <> "" Then
                MessageBox.Show(men)
            Else
                cboProductos.Items.RemoveAt(indice)
                limpiarFormulario()
            End If
            MessageBox.Show("Seleccione un producto para poderlo borrar", "ATENCIÓN")
        End If
    End Sub
    ''' <summary>
    ''' Evento para cuando intentamos añadir un producto
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub misProductos_ErrorProducto(sender As Object, e As EventArgs)
        Dim prod As Producto = TryCast(sender, Producto)
        Me.ErrorProvider1.Clear()
        If prod.Nombre Is Nothing Then Me.ErrorProvider1.SetError(txtNombre, "El nombre debe de tener más de dos caracteres")
        If prod.Precio = 0 Then Me.ErrorProvider1.SetError(txtPrecio, "El precio no puede ser 0")
        If prod.Foto Is Nothing Then Me.ErrorProvider1.SetError(pbFoto, "Introduzca una foto")
    End Sub

End Class